<!DOCTYPE html>
<html lang="ja">

<head>
  <meta charset="utf-8">
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <meta http-equiv="Content-Style-Type" content="text/css">
  <script src='../bbs.js'></script>

  <!-- Global site tag (gtag.js) - Google Analytics -->
  <script async src="https://www.googletagmanager.com/gtag/js?id=UA-120820034-1"></script>

  <link href="../bbs.css" type="text/css" rel="stylesheet">
  <link rel="shortcut icon" href="/favicon.ico">
  <title>最近使ったファイルを開く | サクラエディタ過去ログ</title>
</head>
<body>
<ul class="side">
        <a href="./" class="toindex">◀マクロトップへ</a>
        <li><div class="list-title">
    <span class="no">475</span>
    <a class="thread-title" href="475.html#475">最近使ったファイルを開く</a></div>
    </li>
    </ul><ul class="main"><li><section><h1 id=475>
    <span class="no">[475]</span>
    <a class="thread-title" href="#475">最近使ったファイルを開く</a>
    <span class="author">ななし</span>
    <time datetime="2009-08-20T23:25:54">2009年08月20日 23:25</time></h1>
    <div class="body">2chのスレで話題になっていたので<br>私も書いてみました。<br><br>/*<br>    openMRU.js:  最近使ったファイルを開く<br>    (Unicode 版専用)<br><br>    使い方:<br>        最初にスクリプトを実行すると、最近使ったファイルがリストされます。<br>        リストされたファイル名のうち、<br>        開きたいものの「行頭」に何か「1文字」を「挿入」してください。<br>        それがチェックマークになります。<br>        そしてこのスクリプトをもう一度実行すると、<br>        チェックしたファイルを一度に開きます。<br><br>    ☆タスクバーにサクラを常駐していると、<br>    　最近使ったファイルのリストが古いことがあります。<br>*/<br><br><br>//____________________________________________________________________________<br>function ListMRU()<br>{<br>    // MRU をリストして表示<br><br>    // 改行文字を取得<br>    var lc = Editor.GetLineCode();<br>    if(lc == 0)      lc = '\r\n';<br>    else if(lc == 1) lc = '\r';<br>    else             lc = '\n';<br><br>    // MRU を取得して<br>    var asMRU = GetMRU(Editor.ExpandParameter('$I'));<br><br>    // リストを書き出す<br>    Editor.InsText('\t' + asMRU.join('\t*' + lc + '\t') + '\t*' + lc);<br>}<br><br><br>//____________________________________________________________________________<br>function GetMRU(sIniPath)<br>{<br>    // sakuraW.ini から MRU リストを取り出す<br><br>    var asMatch = LoadUTF8File(sIniPath).match(/^MRU\[\d+\]\.szPath=.*?$/gm);<br><br>    var asMRU = [];<br>    if(asMatch){<br>        for(var i = 0; i &lt; asMatch.length; ++i){<br>            asMatch[i].search(/^MRU\[\d+\]\.szPath=(.*)/);<br>            asMRU[i] = RegExp.$1;<br>        }<br>    }<br><br>    return asMRU;<br>}<br><br><br>//____________________________________________________________________________<br>function LoadUTF8File(sFilePath)<br>{<br>    // UTF8 のファイルを読み込む<br><br>    return DecodeUTF8(LoadBinaryFile(sFilePath));<br>}<br><br><br>//____________________________________________________________________________<br>function LoadBinaryFile(sFilePath)<br>{<br>    // バイナリデータを読み込む<br><br>    fso = new ActiveXObject('Scripting.FileSystemObject');<br><br>    // バイナリモードがないのでUNICODEで開く<br>    var s = fso.OpenTextFile<br>    (   sFilePath<br>    ,   1     /*generic_read*/<br>    ,   false /*open_existing*/<br>    ,   true  /*utf-16 le*/<br>    ).ReadAll();<br><br>    // wchar_t[] -&gt; byte[]<br>    var a = [];<br>    for(var i = 0; i &lt; s.length; ++i){<br>        var c  = s.charCodeAt(i);<br>        var k  = 2 * i;<br>        a[k]   = c &amp; 0xff;<br>        a[k+1] = (c &gt;&gt; 8) &amp; 0xff;<br>    }<br><br>    return a;<br>}<br><br><br>//____________________________________________________________________________<br>function DecodeUTF8(aUTF8)<br>{<br>    // UTF8 のバイナリデータを、デコードする<br><br>    var as = []; // デコードされた文字の配列<br>    var iS = 0;  // as のインデクス<br><br>    var iA = 0; // aUTF8 のインデクス<br>    while(iA &lt; aUTF8.length){<br>        var bytes;<br>        var c = aUTF8[iA++];<br>        if((c &amp; 0x80) == 0){<br>            bytes = 1; // 1バイト文字<br>        }<br>        else if((c &amp; 0xe0) == 0xc0){<br>            bytes = 2; // 2バイト文字<br>            c &amp;= 0x1f;<br>        }<br>        else if((c &amp; 0xf0) == 0xe0){<br>            bytes = 3; // 3バイト文字<br>            c &amp;= 0x0f;<br>        }<br>        else if((c &amp; 0xf8) == 0xf0){<br>            bytes = 4; // 4バイト文字<br>            c &amp;= 0x07;<br>        }<br>        else if((c &amp; 0xfc) == 0xf8){<br>            bytes = 5; // 5バイト文字<br>            c &amp;= 0x03;<br>        }<br>        else if((c &amp; 0xfe) == 0xfc){<br>            bytes = 6; // 6バイト文字<br>            c &amp;= 0x01;<br>        }<br>        else { // エラー<br>            bytes = 1;<br>            c = '?';<br>        }<br><br>        // 多バイト文字をデコード<br>        for(var i = 1; i &lt; bytes; ++i){<br>            var t = aUTF8[iA++];<br>            if((t &amp; 0xc0) == 0x80){<br>                c = (c &lt;&lt; 6) + (t &amp; 0x3f);<br>            }<br>            else{ // エラー<br>                c = '?';<br>                --iA;<br>            }<br>        }<br><br>        as[iS++] = String.fromCharCode(c);<br>    }<br><br>    return as.join('');<br>}<br><br><br>//____________________________________________________________________________<br>// スタートアップ<br><br>// 初回起動か調べつつ、ファイルを開く<br>var isVirgin = true;<br>for(var i = 1; /*forever*/ ; ++i){<br>    var s = Editor.GetLineStr(i);<br>    if(s == '') break;<br><br>    // ファイル名を取得<br>    if(s.search(/^([^\t]?)\t(.*)\t\*$/m) &lt; 0) continue<br>    var sCheck = RegExp.$1;<br>    var sFile  = RegExp.$2;<br><br>    // ファイル名の行があるなら、初回でない<br>    isVirgin = false;<br><br>    // チェックされていれば開く<br>    if(sCheck != ''){<br>        Editor.FileOpen(sFile);<br>    }<br>}<br><br><br>// 初回起動なら、ファイルをリスト<br>if(isVirgin){<br>    ListMRU();<br>}<br><br>// eof<br></div></section>
    </li></ul></body></html>